/**
 * 
 */
package com.yv.security.core.validate.code;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 将获取ValidateCodeProccesor的子类实现代码独立提取出来
 * 在ValidateCodeController中，获取验证码接口直接传进typ[sms/image], 直接使用依赖搜索从map中根据key值获得了具体的ValidateCodeProcessor
 * 而在重构的ValidateCodeFilter中，先需要从request中匹配出验证码类型，然后才能使用依赖搜索通过key获取具体实现。逻辑比较复杂，所以单独提取在这个holder里。
 * @author
 * Date: 图形和短信验证码代码重构整合后
 *
 */
@Component
public class ValidateCodeProcessorHolder {

	@Autowired
	private Map<String, ValidateCodeProcessor> validateCodeProcessors;

	public ValidateCodeProcessor findValidateCodeProcessor(ValidateCodeType type) {
		return findValidateCodeProcessor(type.toString().toLowerCase());
	}

	public ValidateCodeProcessor findValidateCodeProcessor(String type) {
		String name = type.toLowerCase() + ValidateCodeProcessor.class.getSimpleName();
		ValidateCodeProcessor processor = validateCodeProcessors.get(name);
		if (processor == null) {
			throw new ValidateCodeException("验证码处理器" + name + "不存在");
		}
		return processor;
	}

}
